12234
17681
Mám vlastní uživatelské ovládání a hledám návrháře některé jeho vlastnosti. Vlastnosti pocházejí ze struktury. Zde je aktuální kód
Soukromý seznam foo jako Foo_structure
Veřejná struktura Foo_structure
Veřejné vlastnictví a jako celé číslo
Veřejný majetek b Jako celé číslo
Veřejný majetek c jako doplňky
Koncová struktura
Doplňky veřejné struktury
Přesnost veřejného majetku jako celé číslo
Světlo veřejného majetku jako řetězec
Koncová struktura
Veřejný majetek foo jako Foo_structure
Dostat
Vrátit fooList
Konec Get
Nastavit (hodnota ByVal jako Foo_structure)
fooList = hodnota
Konec sady
Ukončit vlastnost
Musím být schopen nastavit vlastnosti Foo_structure z panelu vlastností návrháře, jako je např. Zobrazeno na obrázku níže. 
Budete potřebovat TypeConverter, abyste sbalili foo do řetězce; a převést zpět z toho. Vnořený typ znamená, že musíte pro Extras napsat další. Pravděpodobně budete muset použít některé atributy ke zpracování vytrvalosti návrháře.
Chcete-li začít, myslím, že musíte změnit alespoň Foo_structure na třídu, jinak neexistuje způsob, jak přidat kód do instance Extras (také žádný způsob, jak vytvořit instanci Foo). To by vás mělo začít (změnila některá jména):
„Foo převedeno na třídu:

Veřejná třída FooBar


Foo veřejného majetku jako celé číslo


Bar veřejného majetku jako celé číslo



Veřejný majetek Ex jako doplňky
Public Sub New (a1 jako celé číslo, b2 jako celé číslo)
Foo = a1
Bar = b2
Ex = New Extras 'nechtějí NIC létat
End Sub
Konec třídy
DefaultValue nedělá to, co si možná myslíte. Říká IDE, aby serializoval hodnotu vlastnosti, když se aktuální hodnota nerovná Default. DesignerSerializationVisibility říká společnosti VS, aby uložila hodnotu vlastnosti. Foo a Bar to oba potřebují.
Ex / Extra se liší. NotifyParentProperty umožňuje, aby byl FooBar upozorněn, když se změnila hodnota Extra vlastnosti, takže je aktualizováno okno IDE, interní sada "DirtyFlag" atd .; DesignerSerializationVisibility.Content říká VS, že víme, že nemůžeme uložit Ex jako hodnotu, takže uložte obsah.
Pak přijde FooItemConverter. To bude věc, která zobrazí požadovaný řetězec v okně Rekvizity A vytvoří položku Foo z tohoto řetězce:
Třída přítele FooItemConverter
Zdědí ExpandableObjectConverter
'říká IDE, jaké převody dokáže zpracovat:
Funkce veřejného přepsání CanConvertTo (kontext jako ITypeDescriptorContext,
destType As Type) Jako Boolean
If destType = GetType (String) Then
' Ano, já mohu
Návrat True
Konec Pokud
„Pravděpodobně musíte také říct ANO instančnímu deskriptoru
Vrátit MyBase.CanConvertTo (kontext, destType)
Ukončit funkci
Poté se funkce ConvertTo používá k převodu foo na řetězec. Něco takového:
Funkce veřejného přepsání ConvertTo (kontext jako ITypeDescriptorContext,
kultura jako globalizace.CultureInfo,
hodnota jako objekt, destType jako typ) jako objekt
If destType = GetType (String) Then
Dim f As FooBar = CType (hodnota, FooBar)
Vrátit String.Format ("{0}, {1}, {2}",
f.foo.ToString,
f.bar.ToString,
f.Ex.ToString)
'výstupy: X, Y, 
„kde Ex je to, co používáme v ExtraItemConverteru
Konec, pokud
Vrátit MyBase.ConvertTo (kontext, destType)
Ukončit funkci
Pokud ExtraItemConverter.ConvertTo použít formát "({0} / {1})", obsah ovládacího prvku se zobrazí jako: F, B, (P / L), kde F = Foo, B = pruh atd.
Aby to fungovalo, potřebujete 4 postupy: CanConvertTo, ConvertTo, CanConvertFrom, ConvertFrom, všechny reagující na řetězec. Pravděpodobně budete moci pouze použít atribut  pro vytrvalost.
FooItemConverter.ConvertFrom bude muset vědět, jak z tohoto řetězce vytvořit objekt. Normálně se to děje takto:
'analyzujte řetězec, který jste vytvořili, a vytvořte Foo
Dim els As String () = str.Split ("," c)
Vrátit nový myFoo (Convert.ToInt32 (els (0)), Convert.ToInt32 (els (1)))
Všimněte si, že třetí prvek je ignorován, protože to je ve skutečnosti pro zpracování ExtraItemConverter. Ten převaděč by byl velmi podobný.
Nejprve se tedy budete muset rozhodnout, zda se budete držet struktury nebo použijete třídu (další pro třídu je, že 99,999% příkladů, které najdete, bude založeno na třídě). Tito lidé toho o TypeConverters vědí hodně.
|
Tvoje odpověď
StackExchange.ifUsing ("editor", function () {
StackExchange.using ("externalEditor", function () {
StackExchange.using ("snippets", function () {
StackExchange.snippets.init ();
});
});
}, „code-snippets“);
StackExchange.ready (funkce () {
var channelOptions = {
tagy: "" .split (""),
id: "1"
};
initTagRenderer ("". split (""), "" .split (""), channelOptions);
StackExchange.using ("externalEditor", function () {
// Po výstřižcích je nutné spustit editor, pokud jsou úryvky povoleny
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using ("snippets", function () {
createEditor ();
});
}
else {
createEditor ();
}
});
funkce createEditor () {
StackExchange.prepareEditor ({
useStacksEditor: false,
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Používá \ u003ca href = \" https: //imgur.com/ \ "\ u003e \ u003csvg class = \" svg-icon \ "width = \" 50 \ "height = \" 18 \ "viewBox = \ "0 0 50 18 \" fill = \ "none \" xmlns = \ "http: //www.w3.org/2000/svg \" \ u003e \ u003cpath d = \ "M46.1709 9.17788C46.1709 8.2645446,2665 7,94324 47,1084 7,58816C47.4091 7,46349 47,7169 7,36433 48,0099 7,26993C48,9099 6,97977 49,672 6,73443 49,672 5,93063C49,672 5,22043 48,9832 4,61182 48,1414 4,61182C47,4335 4,61182 46,7256 4,91628 4,91650 4,91650 4,416 164 4,45 43,1481 6,59048V11.9512C43.1481 13,2535 43,6264 13,8962 44,6595 13,8962C45,6924 13,8962 46,1709 13,2535 46,1709 11,9512V9.17788Z \ "/ \ u003e \ u003cpath d = \" M32.492 10,1419432,144,14,144,14,144,44 41,5985 12,6954 41,5985 10,1419 V6,59049C41,5985 5,28821 41,1394 4,6632 40,1061 4,66232C39,0732 4,66232 38,5948 5,2821 38,5948 6,59049V9,60062C38,5948 10,8521 38,2696 11,5455 37,0451 11,5455 11,4455 35,445 C32.9703 4,66232 32,492 5,28821 32,492 6,59049V10.1419Z \ "/ \ u003e \ u003cpath fill-rule = \" evenodd \ "clip-rule = \" evenodd \ "d = \" M25.6622 17.6335C27.8049 17.6335 29.3739 16.9402 3 0,2537 15,6379C30,8468 14,7755 30,9615 13,5579 30,9615 11,9512V6,59049C30.9615 5,28821 30,4833 4,66231 29,4502 4,66231C28,9913 4,66231 28,4555 4,94978 28,1109 5,50789C27,499 4,86533 26,735 21,6013 25,413 21,13 13,13 25,3754 13,913C26,5612 13,913 27,4607 13,4902 28,1109 12,6616C28.1109 12,7229 28,1161 12,7799 28,121 12,8346C28.1256 12,854 28,1301 12,9342 28,1301 12,983 C28.1301 14,4373 27,2502 15,2321 25,77 212,321 14,71 212,231 14,71 212,231 C21. 24,1317 9,27932Z \ "/ \ u003e \ u003cpath d = \" M16.8045 11.9512C16.8045 13.2535 17.2637 13.8962 18.2965 13.8962C19.3298 13.8962 19,8079 13,2535 19,8079 11,9512V8,12928C19,8079 5,82936 18,4879 4,62866 16,4027 4,62866C15,1594 4,62866 14,279 4,98375 13,3609 5,88013C12,653 5,05154 11,6581 4,62866 10,3573 4,62866C9,3433 6,62866 8,77 7,32 6,47 4,32 6,47 4,32 6,47 4,32 6,47 4,32 6,47 5,32 6,47 4,32 6,47 4,32 5.00066 5,28821 500066 6,59049V11,9512C5,00066 13,2535 5,47873 13,8962 6,51203 13,8962C7,54479 13,8962 8,0232 13,2535 8,0232 11,9512V8,90741C8,0232 7,58817 8,44431 6,91179 9,53458 6,91179C10,5104 8,1010 C13.4375 13,8962 13,9157 13,2535 13,9157 11,9512V8,90741C13,9157 7,58817 14,3365 6,91179 15,4269 6,91179C16.4027 6,91179 16,8045 7,58817 16,8045 8,94108V11,9512Z \ "/ \ u003e \ u003c3,3 \ 1,82471 4,66232C0,791758 4,66232 0,313354 5,28821 0,313354 6,59049V11,9512C0,313354 13,2535 0,791758 13,8962 1,82471 13,8962C2.85798 13,8962 3,31675 13,2535 3,31675 11,9512V6,59049Z \ "/ \ u003e \ u003cpath d = \ "M1.87209 0.400291C0.843612 0.400291 0 1,1159 0 1.98861C0 2,87869 0,822846 3,57676 1,87209 3,57676C2.90056 3,57676 3,7234 2,87869 3,7234 1,98861C3,7234 1,11591,001201 1,159 2,0000 \ "/ \ u003e \ u003c / svg \ u003e \ u003c / a \ u003e",
contentPolicyHtml: „Uživatelské příspěvky licencovány pod \ u003ca href = \" https: //stackoverflow.com/help/licensing \ "\ u003ecc by-sa \ u003c / a \ u003e \ u003ca href = \" https://stackoverflow.com / legal / content-policy \ "\ u003e (obsahové zásady) \ u003c / a \ u003e",
allowUrls: true
},
onDemand: pravda,
discardSelector: ".discard-answer"
, okamžitěShowMarkdownHelp: true, enableTables: true, enableSnippets: true
});
}
});
Děkujeme, že jste přispěli odpovědí na Stack Overflow!
Nezapomeňte na otázku odpovědět. Uveďte podrobnosti a sdílejte svůj výzkum!
Ale vyhnout se ...
Žádáme o pomoc, vysvětlení nebo reagujeme na jiné odpovědi.
Vytváření prohlášení na základě názoru; podpořte je referencemi nebo osobní zkušeností.
Další informace najdete v našich tipech na psaní skvělých odpovědí.
Koncept uložen
Koncept zahozen
Zaregistrujte se nebo se přihlaste
StackExchange.ready (funkce () {
StackExchange.helpers.onClickDraftSave ('# login-link');
});
Zaregistrujte se pomocí Google
Zaregistrujte se pomocí Facebooku
Zaregistrujte se pomocí e-mailu a hesla
Předložit
Zveřejněte jako host
název
E-mailem
Povinné, ale nikdy zobrazené
StackExchange.ready (
funkce () {
StackExchange.openid.initPostLogin ('. New-post-login', 'https% 3a% 2f% 2fstackoverflow.com% 2fquestions% 2f24241527% 2fvb-net-setting-properties-of-user-control% 23new-answer', ' page_page ');
}
);
Zveřejněte jako host
název
E-mailem
Povinné, ale nikdy zobrazené
Zveřejněte svou odpověď
Vyřadit
Kliknutím na „Odeslat odpověď“ vyjadřujete souhlas s našimi podmínkami služby, zásadami ochrany osobních údajů a zásadami používání souborů cookie
Toto není odpověď, kterou hledáte? Přečtěte si další otázky týkající se značek vb.net nebo si položte vlastní otázku.